#@Time : 2021/10/2920:33
#@Author : xujian
#三种组件的布局方式：pack(),gird(),place()
#         grid()允许使用表格形式管理组件位置  row代表行 column代表列（主义索引从0 开始）


#功能1：实现一个账号密码的输入
        #设置密码用*掩饰--》Entry的show
#功能2：实现输入内容的设置---（设计到正则表达式，先用简单的替代）

    #验证内容的合法性
        # validate(默认的六种状态) validatecommand invalidatecommand
            #     validate:'focus','focusin','focusout','key','all','none'
            #     validatecommand:需要制指定一个验证函数--》返回True/False,(验证函数只需要知道输入的内容就可以了)
                    #验证函数被提供了许多选项，当用到选项时。我们需要使用register()将其包装起来
                            #'%d'
                            # '%i'
                            # '%P'  文本框輸入的最新文本内容
                            # '%S'被插入、删除的内容
                            # '%s'为调用验证函数前输入框的内容
                            # '%V'调用验证函数的原因该值：'focusin' 'focusout' 'key' 'forced'
                            # '%v'为validate的值
                            # '%W'该组件的名字
            #     invalidatecommand:当validatecommand返回False时执行

from tkinter import *
top=Tk()
top.title("MyEntry")

str1=StringVar()
str2=StringVar()

Label(top,text="账号").grid(row=1)
Label(top,text="密码").grid(row=2)

def check_entry(content,reason,name):
    if e1.get()=="徐健":
        print("right")
        print(content,name,reason)
        return True
    else :
        print("false")
        print(content, name, reason)
        return False
#我们需要将validatecommand用得到的函数包装一下
check_entry_var=top.register(check_entry)

e1=Entry(top,textvariable=str1,validate='focusout',validatecommand=(check_entry_var,'%P','%V','%W'))
#为了让输入框与前面的”账号“有些距离我们可以设置padx以及与下一行的间隔可以设置pady
e1.grid(row=1,column=1,padx=50,pady=10)
e2=Entry(top,textvariable=str2,show="$")
e2.grid(row=2,column=1,padx=50,pady=10)

#设置一个按钮，实现跳转
def get_info():
    print("账号是 %s"%e1.get())
    print("密码是 %s"%e2.get())
    e1.delete(0,END)  #全部删除
    e2.delete(0,END)


#如果表格大于组件的位置，那我们是用grid的参数sticky(N S W E等)
Button(top,text="获取信息",command=get_info).grid(row=3,column=1,sticky=W)
#注意靠右的这个button的padx其实就是他与右边界的距离
Button(top,text="退出",command=top.quit).grid(row=3,column=2,sticky=E,padx=10,pady=10)



mainloop()














